package com.xiaomaoguai.reflect.utils.test;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * @Description :
 * @FileName: Param.java
 * @Author :WeiHui.Zhang
 * @Data : 2015年11月9日 下午5:47:38
 * @Version:V1.00
 */
public class Param<T1, T2> {

	class A {
	}

	class B extends A {
	}

	private Class<T1> entityClass;

	protected Param() {
		// 一.说明
		// 1.Class<? super T> getSuperclass():返回本类的父类,返回一层
		// 2.Type getGenericSuperclass():返回本类的父类,包含泛型参数信息
		Class<?> superclass = getClass().getSuperclass();
		
		Type type = getClass().getGenericSuperclass();
		//getActualTypeArguments 得到泛型的类型
		Type trueType = ((ParameterizedType) type).getActualTypeArguments()[0];
		
		trueType = ((ParameterizedType) type).getActualTypeArguments()[1];
		
		this.entityClass = (Class<T1>) trueType;

		B t = new B();
		type = t.getClass().getGenericSuperclass();

		System.out.println("B is A's super class :" + ((ParameterizedType) type).getActualTypeArguments().length);
	}

}
